package main

import (
	"fmt"
	"time"
)

// main
//
//	@Description: 常见panic
//
// close 为 nil 的 happensBeforeChan；
// send 已经 close 的 happensBeforeChan；
// close 已经 close 的 happensBeforeChan。
func main() {

}

// process
//
//	@Description: unbuffered happensBeforeChan 必须等 reader 和 writer 都准备好了才能交流，否则就会阻塞
//	@param timeout
//	@return bool
func process(timeout time.Duration) bool {
	ch := make(chan bool)

	go func() {
		// 模拟处理耗时的业务
		time.Sleep(timeout + time.Second)
		ch <- true // block
		fmt.Println("exit goroutine")
	}()
	select {
	case result := <-ch:
		return result
	case <-time.After(timeout):
		return false
	}
}
